package com.youdianstar.app.common.network

import androidx.lifecycle.Observer
import com.youdianstar.app.common.network.model.BaseResponse
import com.youdianstar.app.common.network.model.DataState


/**
 * File: BaseApiResultObserver
 * Author: 82149 Create: 2021/11/1 17:11
 * Changes (from 2021/11/1)
 * --------------------------------------------------
 * description: 接口数据回调 --不改UI状态
 * ---------------------------------------------------
 *
 */
private const val TAG = "BaseApiResultObserver"

abstract class BaseApiResultObserver<T>(canEmpty:Boolean? = false) : Observer<BaseResponse<T>> {
    var allowEmpty :Boolean = false

    init {
        canEmpty?.let {
            this.allowEmpty = it
        }
    }

    override fun onChanged(t: BaseResponse<T>) {
//        Log.d(TAG, "onChanged: ${t.dataState}")
        when (t.dataState) {
            DataState.STATE_SUCCESS -> {
                onDataResult(t.data)
            }

            DataState.STATE_EMPTY -> {
                if (allowEmpty)
                    onDataResult(null)
                else
                    onDataEmpty()
            }

            DataState.STATE_FAILED -> {
                // 优先使用 message，如果没有则使用 error 的 message
                val errorMsg = t.message ?: t.error?.message ?: "Request failed"
                onNetError(t.code, errorMsg)
            }
            DataState.STATE_ERROR -> {
                //请求错误，优先使用 message，如果没有则使用 error 的 message
                val errorMsg = t.message ?: t.error?.message ?: "Network error occurred"
                onNetError(-1, errorMsg)
            }
            else -> {
            }
        }
    }


    /**
     * 请求数据且数据不为空
     */
    open fun onDataResult(data: T?) {

    }

    /**
     * 请求成功，但数据为空
     */
    open fun onDataEmpty() {

    }

    /**
     * 请求错误
     */
    open fun onNetError(code: Int, e: String?) {

    }

}